﻿#define _CRT_SECURE_NO_WARNINGS
////猜数字游戏
////int rand(void);//void:表示无需传参,即调用rand函数的时候()里不能有任何数字
//#include<stdlib.h>
//#include<stdio.h>
//int main()
//{
//	//time_t;//int/long long
//	//RAND_MAX;
//	srand((unsigned int)time(NULL));//(unsigned int):将time强制转换成无符号整形         函数srand，⽤来初始化随机数的⽣成器的，srand的原型如下：void srand (unsigned int seed);
// //time函数的参数 timer 如果是⾮NULL的指针的话，函数也会将这个返回的差值放在timer指向的内存
//如果 timer 是NULL，就只返回这个时间的差值。time函数返回的这个时间差也被叫做：时间戳。

//	printf("%d\n", rand());
//	printf("%d\n", rand());
//	printf("%d\n", rand());
//	printf("%d\n", rand());
//	printf("%d\n", rand());
//	//随机生成5个数字
//	//but第一次运行和第二次运行的结果都一样,这是为什么呢?
//	//其实rand函数⽣成的随机数是伪随机的，伪随机数不是真正
//	//的随机数，是通过某种算法⽣成的随机数。真正的随机数的是⽆法预测下⼀个值是多少的。⽽rand函
//	//数是对⼀个叫“种⼦”的基准值进⾏运算⽣成的随机数。
//	//之所以前⾯每次运⾏程序产⽣的随机数序列是⼀样的，那是因为rand函数⽣成随机数的默认种⼦是1。
//	//如果要⽣成不同的随机数，就要让种⼦是变化的。
//	// 
//	//在程序中我们⼀般是使⽤程序运⾏的时间作为种⼦的，因为时间时刻在发⽣变化的。
//	//在C语⾔中有⼀个函数叫 time ，就可以获得这个时间，time函数原型如下：
//	//time_t time(time_t * timer);
//	//time 函数会返回当前的⽇历时间，其实返回的是1970年1⽉1⽇0时0分0秒到现在程序运⾏时间之间的
//	//差值，单位是秒。返回的类型是time_t类型的，time_t 类型本质上其实就是32位或者64位的整型类型
//	//时间戳:是相较于计算机的起始时间的差值   time函数调用时要包含time.h文件
//	return 0;
//}

//如何限制生成随机数的范围
//如果要生成a-b随机数,方法如下:
//a+rand()%(b-a+1)
//
//#include<stdlib.h>
//#include<stdio.h>
//int main()
//{
//	//time_t;//int/long long
//	//RAND_MAX;
//	srand((unsigned int)time(NULL));//(unsigned int)是将time强制类型转换成无符号整型传给srand
//
//	printf("%d\n", rand( ) % 100 + 1);
//	printf("%d\n", rand( ) % 100 + 1);
//	printf("%d\n", rand( ) % 100 + 1);
//	printf("%d\n", rand( ) % 100 + 1);
//	printf("%d\n", rand( ) % 100 + 1);
//
//	return 0;
//}

////猜数字游戏的实现
//#include<stdlib.h>
//#include<stdio.h>
//void menu()//menu函数无返回值
//{
//	printf("******************************************\n");
//	printf("*****            1.play               ****\n");
//	printf("*****            0.exit               ****\n");
//	printf("******************************************\n");
//}
//void game()
//{
//	int guess = 0;
//	//1.生成随机数
//	//srand((unsigned int)time(NULL));;//srand只需要调用一次否则会出问题,所以放后面
//
//	int r = rand() % 100 + 1;
//	//printf("%d\n", r);//看看能否生成随机数的测试
//	//2.猜数字
//	while (1)
//	{
//		printf("请猜数字>:");
//		scanf("%d", &guess);
//		if (guess > r)
//		{
//			printf("猜大了\n");
//		}
//		else if (guess < r)
//		{
//			printf("猜小了\n");
//		}
//		else
//		{
//			printf("恭喜你,猜对了\n");
//			break;
//		}
//	}
//}
//int main()
//{
//	int input = 0;
//	srand((unsigned int)time(NULL));//srand只需要调用一次否则会出问题,所以放这里
//	do
//	{
//		//打印菜单
//		menu();
//		printf("请选择:>");
//		scanf("%d", &input);//1 0 8
//		switch (input)
//		{
//		case 1:
//			game();
//			break;
//		case 0:
//			printf("退出游戏\n");
//			break;
//		default:
//			printf("选择错误,重新选择\n");
//			break;
//
//		}
//
//	} while (input );//如果input=0则会来到while然后退出游戏
//	return 0; 
//}

#include<stdlib.h>
#include<stdio.h>
void menu()//menu函数无返回值
{
	printf("******************************************\n");
	printf("*****            1.play               ****\n");
	printf("*****            0.exit               ****\n");
	printf("******************************************\n");
}
void game()
{
	int guess = 0;
	//1.生成随机数
	//srand((unsigned int)time(NULL));;//srand只需要调用一次否则会出问题,所以放后面

	int r = rand() % 100 + 1;
	//printf("%d\n", r);//看看能否生成随机数的测试
	//2.猜数字
	int count = 5;
	while (count)
	{
		printf("你还有%d次猜数字机会\n", count);
		printf("请猜数字>:");
		scanf("%d", &guess);
		if (guess > r)
		{
			printf("猜大了\n");
		}
		else if (guess < r)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}
		count--;
	}
	if (count == 0)
	{
		printf("猜数字失败");
	}
}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));//srand只需要调用一次否则会出问题,所以放这里
	do
	{
		//打印菜单
		menu();
		printf("请选择:>");
		scanf("%d", &input);//1 0 8
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,重新选择\n");
			break;

		}

	} while (input);//如果input=0则会来到while然后退出游戏
	return 0;
}



//#include <stdio.h>
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	printf("%d\n", arr[7]);//8
//	printf("%d\n", arr[3]);//4
//	return 0;
//}

//数组arr的类型是int[10]
//数组元素类型才是整数
 
//c99标准之前数组的大小只能是常量指定,不能使用变量
//c99之后为什么就使用变量呢?---变长数组
//变长数组:数组大小可以根据输入的变量决定其大小的数组--如下
//int n;
//scanf("%d",&n);
// int array[n];



//#include <stdio.h>
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	//printf("%d\n",arr[6]);//[] 下标应用操作符
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d\n", arr[i]);
//	}
//	return 0;
//}


//#include<stdio.h>
//int main()
//{
//	int num1[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int i = 0;
//	//输入
//	for (i = 0; i <= 9; i++)//产生0-9的下标
//	{
//		scanf("%d", &num1[i]);
//	}
//	//输出
//	for (i = 1; i < 10; i++)//产生0-9的下标
//	{
//		printf("%d", num1[i]);
//	}
//	return 0;
//}
//数组的输入:输入的是数组元素,输出的的也是元素

//%p-打印地址
//#include<stdio.h>
//int main()
//{
//	int num1[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int i = 0;
//	
//	for (i = 1; i < 10; i++)//产生0-9的下标
//	{
//		printf("&arr[%d]=%p\n",i,& num1[i]);
//	}
//	return 0;
//}

//数组元素个数的计算
//#include <stdio.h>
//int main()
//{
//	int arr[10] = { 1,2,3 };//10个元素+4字节=40
//	printf("%d\n", sizeof(arr));//sizeof(数组名)计算的是数组所占内存空间的大小,单位是字节
//	printf("%d\n", sizeof(arr[0]));//计算一个元素占几个字节
//	printf("%d\n", sizeof(arr)/sizeof(arr[0]));//计算的是数组元素个数10
//
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int i = 0;
//	for (i=0;i<sz;i++)
//	{
//		printf("%d", arr[i]);
//	}
//	return 0;
//}

//注意:计算数组大小如果是类型括号不可以省略
//例如 :
//#include<stdio.h>
//int main()
//{
//	int a = 10;
//
//	//size_t
//	printf("%d\n", sizeof(int));
//	printf("%d\n", sizeof(a));
//	printf("%d\n", sizeof a);
//
//	return 0;
//}
//
//
//sizeof 的计算结果是size_t类型的
//size_t 是无符号整型

//#include<stdio.h>
//int main()
//{
//	//二维数组如何进行完全初始化
//	int arr1[2][2] = { 1,2,3,4 };
//	//二维数组如何按照行进行初始化
//	int arr2[3][5] = { {1,2,3},{2,3,4,5},{2,2,2,2,2} };
//	return 0;
// }

//#include<stdio.h>
//int main()
//{
//	int arr[3][5] = { {1,2,3,4,5},{2,3,4,5,6} ,{3,4,5,6,7} };
//	//printf("%d\n",arr[1][3]);//[]下标引用操作符
//	int i = 0;
//	for (i = 0; i < 3; i++)
//	{
//		int j = 0;
//		for (j = 0; j < 5; j++)
//		{
//			printf("%d", arr[i][j]);
//		}
//		printf("\n");
//	}
//	return 0;
//}


//#include<stdio.h>
//int main()
//{
//	int arr[3][5] = { {1,2,3,4,5},{2,3,4,5,6} ,{3,4,5,6,7} };
//	//printf("%d\n",arr[1][3]);//[]下标引用操作符
//	//输入
//	
//	int i = 0;
//	for (i = 0; i < 3; i++)
//	{
//		int j = 0;
//		for (j = 0; j < 5; j++)
//		{
//			scanf("%d", &arr[i][j]);
//		}
//	}
//	//输出
//	for (i = 0; i < 3; i++)
//	{
//		int j = 0;
//		for (j = 0; j < 5; j++)
//		{
//			printf("%d", arr[i][j]);
//		}
//		printf("\n");
//	}
//	return 0;
//}


//#include<stdio.h>
//int main()
//{
//	int arr[3][5] = { {1,2,3,4,5},{2,3,4,5,6} ,{3,4,5,6,7} };
//	//printf("%d\n",arr[1][3]);//[]下标引用操作符
//	int i = 0;
//	for (i = 0; i < 3; i++)
//	{
//		int j = 0;
//		for (j = 0; j < 5; j++)
//		{
//			printf("arr[%d][%d]=%p\n",i,j, &arr[i][j]);
//		}
//		printf("\n");
//	}
//	return 0;
//}

//#include <stdio.h>
//#include<windows.h>
//int main()
//{
//	char arr1[] = "林城斌是猪猪猪猪猪猪猪猪";
//	char arr2[] = "#################";
//	int left = 0;
//	int right = strlen(arr1) - 1;
//	printf("%s\n", arr2);
//	while (left <= right)
//	{
//		arr2[left] = arr1[left];
//		arr2[right] = arr1[right];
//		Sleep(1000);
//		system("cls");
//		left++;
//		right--;
//		printf("%s\n", arr2);
//	}
//	return 0;
//}